﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Windows.Forms;
using Badge_Manager.Model;

namespace Badge_Manager.Controller
{
    class ctrlStoricoEntrate
    {
        public enum Inserimento
        {
            Eseguita,
            NoInserimento,
            Errore
        }

        public enum Cancellazione
        {
            Successo,
            NoElementi,
            Errore
        }

        private Connector conn;

        public ctrlStoricoEntrate()
        {
            conn =  Connector.Istance();
        }

        public Inserimento Inserisci(StoricoEntrata storicoEntrata)
        {
            string query = @"insert into StoricoEntrate values (@id, @dataentrata
                , @successo, @idtessera,@ora)";
            try
            {
                SqlCommand inserisci = new SqlCommand(query, conn.Connessione);
                SqlParameter id = new SqlParameter();
                id.ParameterName = "@id";
                id.SqlDbType = SqlDbType.UniqueIdentifier;
                id.Value = storicoEntrata.Id;
                inserisci.Parameters.Add(id);

                SqlParameter dataentrata = new SqlParameter();
                dataentrata.ParameterName = "@dataentrata";
                dataentrata.SqlDbType = SqlDbType.DateTime;
                dataentrata.Value = storicoEntrata.DataEntrata;
                inserisci.Parameters.Add(dataentrata);

                SqlParameter successo = new SqlParameter();
                successo.ParameterName = "@successo";
                successo.SqlDbType = SqlDbType.Bit;
                successo.Value = storicoEntrata.Successo;
                inserisci.Parameters.Add(successo);
                
                SqlParameter idtessera = new SqlParameter();
                idtessera.ParameterName = "@idtessera";
                idtessera.SqlDbType = SqlDbType.UniqueIdentifier;
                idtessera.Value = storicoEntrata.Tessera.Id;
                inserisci.Parameters.Add(idtessera);

                SqlParameter ora = new SqlParameter();
                ora.ParameterName = "@ora";
                ora.SqlDbType = SqlDbType.Time;
                ora.Value = storicoEntrata.Ora;
                inserisci.Parameters.Add(ora);

                if (inserisci.ExecuteNonQuery() > 0)
                    return Inserimento.Eseguita;
                else
                    return Inserimento.NoInserimento;
            }
            catch
            {
                return Inserimento.Errore;
            }
        }

        public Cancellazione Cancella(StoricoEntrata Storico)
        {
            string sql;
            sql = "delete from StoricoEntrate "
                + " where id=@condizione";
            try
            {
                SqlCommand cmd = new SqlCommand(sql, conn.Connessione);

                SqlParameter condizione = new SqlParameter();
                condizione.ParameterName = "@condizione";
                condizione.SqlDbType = SqlDbType.UniqueIdentifier;
                condizione.Value = Storico.Id;
                cmd.Parameters.Add(condizione);

                if (cmd.ExecuteNonQuery() > 0)
                    return Cancellazione.Successo;
                else
                    return Cancellazione.NoElementi;
            }
            catch
            {
                return Cancellazione.Errore;
            }
        }

        public List<StoricoEntrata> SelectAll()
        {
            List<StoricoEntrata> lista = new List<StoricoEntrata>();
            foreach (DataRow riga in SelectTableAll().Rows)
            {
                StoricoEntrata sto=new StoricoEntrata();
                sto.Id =(Guid)riga[0];
                sto.DataEntrata = (DateTime)riga[1];
                sto.Successo = Convert.ToBoolean(riga[2]);
                sto.Tessera.Id = (Guid)riga[3];
                lista.Add(sto);
            }
            return lista;
        }

        private DataTable SelectTableAll()
        {
            DataTable dati = new DataTable();
            
            Controller.Connector con = Controller.Connector.Istance();
            SqlConnection conn = con.Connessione;

            SqlDataAdapter adapter = new SqlDataAdapter(@"SELECT Persone.cognome, Persone.nome,                             StoricoEntrate.dataentrata, StoricoEntrate.successo 
            FROM Persone INNER JOIN Tessere ON Persone.idtessera 
            = Tessere.id INNER JOIN StoricoEntrate ON Tessere.id = StoricoEntrate.idtessera", conn);

            adapter.Fill(dati);
            return dati;
        }

        public List<StoricoEntrata> VisualizzaAccessiTessera(StoricoEntrata Storico)
        {
            string sql;
            sql = @"select id as Id,dataentrata as Entrata,successo as Successo
                ,idtessera as Tessera,ora as Orario
                where idtessera='" + Storico.Tessera.Id+"'";

            SqlDataAdapter com = new SqlDataAdapter(sql, conn.Connessione);
            DataTable dt = new DataTable();
            com.Fill(dt);
            List<StoricoEntrata> elencoRitorno = new List<StoricoEntrata>();
            foreach (DataRow row in dt.Rows)
            {
                StoricoEntrata storicoRitorno = new StoricoEntrata();
                storicoRitorno.Id = (Guid)row["Id"];
                storicoRitorno.DataEntrata =(DateTime) row["Entrata"];
                storicoRitorno.Successo = (bool)row["Successo"];
                storicoRitorno.Tessera.Id = (Guid)row["Tessera"];
                storicoRitorno.Ora = (TimeSpan)row["Ora"];
                elencoRitorno.Add(storicoRitorno);
            }
            return elencoRitorno;
        }
    }
}

